import cv2
import numpy as np

img = cv2.imread('i.jpeg')

#腐蚀
#有助于消除小的白噪声，分离两个连接的对象
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img, kernel, iterations = 1)
cv2.imshow('show',erosion)
cv2.waitKey()

#膨胀
dilation = cv2.dilate(img, kernel, iterations = 1)
cv2.imshow('show',dilation)
cv2.waitKey()

#开运算
#先腐蚀再膨胀，有助于消除噪音
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow('show',opening)
cv2.waitKey()

#闭运算
#先膨胀后腐蚀，用于消除前景对象内的小孔或对象上的小黑点.
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imshow('show',closing)
cv2.waitKey()

#形态学梯度
#图像的膨胀和腐蚀之间的差异，结果看起来像目标的轮廓
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('show',gradient)
cv2.waitKey()

#顶帽（Top Hat）
#原图像与开运算图的区别，突出原图像中比周围亮的区域
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('show',tophat)
cv2.waitKey()

#黑帽(Black Hat)
#闭运算图 - 原图像,突出原图像中比周围暗的区域
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('show',blackhat)
cv2.waitKey()